package com.hlju.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hlju.reggie.bean.Category;
import com.hlju.reggie.common.R;
import com.hlju.reggie.service.CategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 前端请求传递参数分类：
 * 1、普通参数
 *      直接在请求的方法中定义对应的变量获取就可以 注意参数名称要一致
 *      如果参数名称 可以使用@RequestParam("参数名")注解来进行映射
 * 2、json参数
 *      json参数本质也是一个字符串、只是该字符串中可能是一个集合内容、或者是一个对象
 *      使用@RequestBody注解来将json数据转为自定义对象
 * 3、restFul参数
 *      前端传递的参数没有参数名称 直接在地址后拼接/参数值
 *      在请求地址后/{定义名字}占位符
 *      使用@PathVariable("名字")注解获取对应的参数
 */


@RestController
@RequestMapping("/category")
public class CategortController {

    @Autowired
    private CategoryService categoryService;

    //分页查询分类
    @GetMapping("/page")
    public R<Page> page(Integer page, Integer pageSize) {
        //创建分页对象
        Page<Category> pageInfo = new Page<>(page, pageSize);
        //创建条件构造器
        QueryWrapper<Category> wrapper = new QueryWrapper<>();
        wrapper.orderByDesc("sort");
        //执行分页
        categoryService.page(pageInfo, wrapper);
        //返回数据
        return R.sucess(pageInfo);
    }

    //新增分类
    @PostMapping
    public R<String> addCategory(@RequestBody Category category){
        return categoryService.save(category) ? R.sucess("添加成功"):R.error("添加失败");
    }

    //修改分类
    @PutMapping
    public R<String> upadteCategory(@RequestBody Category category){
        return categoryService.updateById(category) ? R.sucess("修改成功"):R.error("修改失败");
    }

    //删除分类
    @DeleteMapping
    public R<String> udeleteCategory(Long id){
        return categoryService.removeById(id) ? R.sucess("删除成功"):R.error("删除失败");
    }

    //根据type获取分类
    @Cacheable(value = "categoryCache")
    @GetMapping("/list")
    public R<List<Category>> list(Integer type){
        QueryWrapper<Category> wrapper = new QueryWrapper<>();
        if(type !=null ){
            wrapper.eq("type",type );
        }
        return R.sucess(categoryService.list(wrapper));
    }


}
